package Power_Asisst.main;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import process.CustomArrayAdapter;

import process.Stack;

import process.*;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class SdCard extends Activity{
	private EditText text_duongdan ;
	private Button open;
	private Button SendFile;
	private ListView lv;
	private List<String> path = null; // lưu tất cả các đường dẫn của file
	private List<String> item = null;
	AlertDialog.Builder builder;// //xuất hiện hộp thoại giống message box
	AlertDialog alter; // dùng để tạo hộp thoại
	private String m_Chuoi = "";
	private String root = "/sdcard"; // đường dẫn gốc
	Stack st = new Stack();
	String m_DuongDan = "";
	private String duondgan = "";
	// Khue has change here IP --> array of IP
	//private String IP ="";
	private String[] IP ;
	Untils svUntil = new Untils();
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.sdcard);
		 Bundle bundle = getIntent().getExtras();
	    //    GiaoThuc = bundle.getString("Giao");
		 // Khue has mod to multi client send reuqest	
	     //   IP = bundle.getString("IP");
		 
		 //--> it here
		 	int size=bundle.getInt("sizeOfIP");
		 	String[]ipArray=bundle.getStringArray("IP");
		 	IP=svUntil.IPSlipt(ipArray);
		 //<-- end here
		st.KhoiTao();
		builder = new AlertDialog.Builder(this);
		open = (Button) findViewById(R.id.btn_Open);
		text_duongdan = (EditText)findViewById(R.id.et_DuongDan);
		SendFile = (Button)findViewById(R.id.btnSendfile);
		//
		lv = (ListView) findViewById(R.id.lv_show);
		open.setVisibility(View.INVISIBLE);
		GetDir(root);
		// open.setVisibility(0);
		SendFile.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				
			}
		});
		open.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				int leng = st.DS.size();
				if (leng > 1) {

					st.DS.remove(leng - 1);
					leng = st.DS.size();
					m_DuongDan = st.Pop(st, leng - 1);
					GetDir(m_DuongDan);
					Toast.makeText(getBaseContext(), m_DuongDan,
							Toast.LENGTH_SHORT).show();

				} else {

					open.setVisibility(View.VISIBLE);

				}

			}
		});
	}
	 @Override
	    public boolean onKeyDown(int keyCode, KeyEvent event)
	    { 
	    	
	    	if(keyCode==KeyEvent.KEYCODE_BACK) 
	    	{  
	    		int leng = st.DS.size();
				if (leng > 1) {

					st.DS.remove(leng - 1);
					leng = st.DS.size();
					m_DuongDan = st.Pop(st, leng - 1);
					GetDir(m_DuongDan);
					Toast.makeText(getBaseContext(), m_DuongDan,
							Toast.LENGTH_SHORT).show();
					return true;

				} 
	    	}
	    	return super.onKeyDown(keyCode, event);

	    	
	    }

	String chuoi = "";

	public void GetDir(String m_path) {
		// open.setVisibility(View.VISIBLE);

		int flag = 0;
		for (int i = 0; i < st.DS.size(); i++) {
			if (m_path.equals(st.DS.get(i))) {
				flag = 1;
			}
		}
		if (flag == 0) {
			st.Push(st, m_path);
		}
		if (st.DS.size() > 1) {
			open.setVisibility(View.VISIBLE);
		} else {
			open.setVisibility(View.INVISIBLE);
		}
		//String duondgan = "Location " + m_path;
		duondgan =  m_path;
		
		text_duongdan.setText(duondgan);
		item = new ArrayList<String>();
		path = new ArrayList<String>();

		File file = new File(m_path);
		File[] listfile = file.listFiles();// lấy tất cả danh sách file trong
											// đường dẫn
		if (!m_path.equals(root))// nếu đường dẫn không là root
		{
			path.add(root);
			path.add(file.getParent());

		}

		for (int i = 0; i < listfile.length; i++) {
			File m_file = listfile[i];// lấy đừng file trong ds file
			path.add(m_file.getPath());// lấy đường dẫn lưu trong mảng đường dẫn
			if (m_file.isDirectory()) // nếu file là folder
			{
				File[] dsFile = m_file.listFiles();
				item.add(m_file.getName() + "/");// lấy tên của file đưa vào
													// mảng item
				chuoi += file.getName() + "/";

			} else {
				String filename = m_file.getName();// lấy tên file
				int length = filename.lastIndexOf(".");// lấy chiều dài của file
														// từ đầu đến dấu chấm
				String DuoiFile = filename.substring(length + 1);// cắt chuổi
																	// file để
																	// lấy đuôi
																	// fille
				// nếu file tận cùng có các đuôi thì hiện ra
				if (DuoiFile.equals("apk") || DuoiFile.equals("ppt")
						|| DuoiFile.equals("doc") || DuoiFile.equals("jpg")
						|| DuoiFile.equals("mp3") || DuoiFile.equals("jar")
						|| DuoiFile.equals("flv") || DuoiFile.equals("JPG")
						|| DuoiFile.equals("pdf") || DuoiFile.equals("xls")
						|| DuoiFile.equals("bak") || DuoiFile.equals("dat")
						|| DuoiFile.equals("mp4") || DuoiFile.equals("txt")
						|| DuoiFile.equals("png") || DuoiFile.equals("exe")) {
					item.add(filename);// add file đó vào mảng item
					chuoi += filename;
					chuoi += "\n";

				}
			}

		}
		// hiển thị danh sách file trong mảng item lên listview
		for (int i = 0; i < item.size(); i++) {
			String ten = item.get(i);
			if (ten.endsWith("/")) {
				// item.s
			}
		}
		lv.setAdapter(new CustomArrayAdapter(this,
				android.R.layout.simple_expandable_list_item_2, item));//

		// sự kiện click lên item của list view
		
		lv.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				// TODO Auto-generated method stub

				Object o = lv.getItemAtPosition(arg2);
				final int vt = arg2;
				m_Chuoi = o.toString();// lấy ra tên của file mà ngta click vào
				
				
										// item
				builder.setMessage("Bạn có muốn mở " + m_Chuoi + " hay không ?");// xuất
																					// hiện
																					// hộp
																					// thoại
				builder.setCancelable(false);
				builder.setPositiveButton("Yes", new OnClickListener() {// nếu
																		// bạn
																		// chọn
																		// yes

							@Override
							public void onClick(DialogInterface dialog,
									int which) {
								// TODO Auto-generated method stub
								if (m_Chuoi.endsWith("/"))// nếu file đó là
															// folder
								{

									String path1 = LayChuoi(m_Chuoi);// lấy
																			// đường
																			// dẫn
																			// ứng
																			// với
																			// folder
																			// đó
									GetDir(path1);// ứng với đường dẫn vừa lấy
													// mình tiến hành mở folder
													// đó ra
								} else// nếu file đó là một file
								{
									// tiến hành láy đuôi file
									duondgan+="/"+m_Chuoi;
									text_duongdan.setText(duondgan);
									int leng = m_Chuoi.lastIndexOf(".");
									String fname = m_Chuoi.substring(leng + 1);
									// tiến hành lấy đường dẫn của file đó
									String m_ddan = LayChuoi(m_Chuoi);
									String ddan = LayChuoi(m_Chuoi);
									
									ddan += "/" + m_Chuoi;

									// mở file với đường dẫn đã lấy ở trên
									Intent intent = new Intent();
									intent.setAction(Intent.ACTION_VIEW);
									Uri uri = Uri.parse("file://" + ddan);

									// nếu đuôi file là jpg, jpeg, JPG, gif
									if (fname.equals("jpeg")
											|| fname.equals("png")
											|| fname.equals("JPG")
											|| fname.equals("jpg")
											|| fname.equals("gif")) {
										SendFileUDP u = new SendFileUDP();
										
									// Khue has change here
										
						 				//String a =
						 					u.SendUsingUDP(m_ddan,m_Chuoi,IP);
										//Toast.makeText(getBaseContext(), a, Toast.LENGTH_SHORT).show();
						 					
						 					
										/*intent.setDataAndType(uri, "image/*");
										startActivity(intent);*/
									}
									// nếu đuôi file là mp4, 3pg
									else if (fname.equals("mp4")
											|| fname.equals("3gp")) {
										intent.setDataAndType(uri, "video/*");
										startActivity(intent);
									}
									// nếu đuôi file là mp3
									else if (fname.equals("mp3")) {
										intent.setDataAndType(uri, "audio/*");
										startActivity(intent);
									}
									// nếu file là file power point
									else if (fname.equals("ppt")||fname.equals("pptx")) {
										/*Intent inte = new Intent();
										inte.setAction(android.content.Intent.ACTION_VIEW);
										File file = new File(ddan);
										inte.setDataAndType(Uri.fromFile(file),
												"application/vnd.ms-powerpoitn");
										try {
											startActivity(inte);
										} catch (Exception e) {
											// TODO: handle exception
											Toast.makeText(
													getApplicationContext(),
													"Bạn chưa có phần mềm",
													Toast.LENGTH_SHORT).show();
										}*/
										// Khue has mod here
										
										//->>> start here
										
										
										
										
										SendFileUDP u = new SendFileUDP();
										//Khue has change here time 11/5
						 				//String a = 
										//u.SendUsingUDP(m_ddan,m_Chuoi,IP);
										//Toast.makeText(getBaseContext(), a, Toast.LENGTH_SHORT).show();
										
										// <--- end
										/*SendFileTCP u = new SendFileTCP();
										String a = u.SendUsingTCP(m_ddan,m_Chuoi,IP);//u.KetNoi("Như Cùi Bắp");
										Toast.makeText(getBaseContext(), a, Toast.LENGTH_SHORT).show();*/
										
										// Khue has change
										
										try {
											u.SendUsingUDP(m_ddan,m_Chuoi,IP);
									//		Intent intent1 = new Intent();
									//    	intent1.setClass(getBaseContext(),RemotePowerPoint.class);
									//    	intent1.putExtra("IP", IP);
									 //   	intent1.putExtra("Giao", "UDP");
									//		startActivity(intent1);
										} catch (Exception e) {
											// TODO: handle exception
											Log.e("Co Loi Trong for ", e.toString());
											Log.d("Co Loi Trong for ", e.toString());
										}
										
										
										/*if(!a.equals("unsuccessful"))
										{
											Intent intent1 = new Intent();
									    	intent1.setClass(getBaseContext(),RemotePowerPoint.class);
									    	intent1.putExtra("IP", IP);
									    	intent1.putExtra("Giao", "UDP");
											startActivity(intent1);
										}*/
										
										
										
									}
									// nếu đuôi file là file word
									else if (fname.equals("doc")) {
										Intent inte = new Intent();
										inte.setAction(android.content.Intent.ACTION_VIEW);
										File file = new File(ddan);
										inte.setDataAndType(Uri.fromFile(file),
												"application/vnd.ms-word");
										try {
											startActivity(inte);
										} catch (Exception e) {
											// TODO: handle exception
											Toast.makeText(
													getApplicationContext(),
													"Bạn chưa có phần mềm",
													Toast.LENGTH_SHORT).show();
										}

									}
									// nếu đuôi file là file pdf
									else if (fname.equals("pdf")) {
										Intent inte = new Intent();
										inte.setAction(android.content.Intent.ACTION_VIEW);
										File file = new File(ddan);
										inte.setDataAndType(Uri.fromFile(file),
												"application/pdf");
										try {
											startActivity(inte);
										} catch (Exception e) {
											// TODO: handle exception
											Toast.makeText(
													getApplicationContext(),
													"Bạn chưa có phần mềm",
													Toast.LENGTH_SHORT).show();
										}

									}
									// nếu file là file exel
									else if (fname.equals("xsl")) {
										Intent inte = new Intent();
										inte.setAction(android.content.Intent.ACTION_VIEW);
										File file = new File(ddan);
										inte.setDataAndType(Uri.fromFile(file),
												"application vnd.ms-excel");
										try {
											startActivity(inte);
										} catch (Exception e) {
											// TODO: handle exception
											Toast.makeText(
													getApplicationContext(),
													"Bạn chưa có phần mềm",
													Toast.LENGTH_SHORT).show();
											return;
										}
									}
									// còn lại là không hổ trở file
									else {
										
										Toast.makeText(getApplicationContext(),
												"Không hổ trợ file",
												Toast.LENGTH_SHORT).show();
										return;
									}
								}
							}
						});
					builder.setNegativeButton("No", new OnClickListener() {
					@Override
					public void onClick(DialogInterface arg0, int arg1) {
						// TODO Auto-generated method stub
						arg0.cancel();
					}
				});
				alter = builder.create();
				alter.show();
			}
		});
	}

	String m = "";
	File name1;

	public String LayChuoi(String a) {
		
		String k = "";

		for (int i = 0; i < path.size(); i++) {

			String d = path.get(i);
			// String k = d.valueOf(d.length()-1);
			int leng = d.lastIndexOf("/");
			String c = d.substring(leng + 1);
			// int leng1 = d.lastIndexOf("/");
			k = c + "/";
			if (k.equals(a)) {
				m = path.get(i);
				name1 = new File(m);
				k = name1.getPath();
				return k;
			}
		}
		k = name1.getPath();
		return k;
	}
}
